HTTP1.0通过短连接来实现请求和响应，
HTTP1.1引入了长连接和更多的请求头和响应头来优化。
而HTTP2.0则进一步提升了性能，通过多路复用、二进制分帧、首部压缩和服务器推送等特性来优化数据传输和性能表现。

<!-- 对HTTP请求中的keep-alive有了解吗 -->
在HTTP协议中keep-valie是一种长连接。
在HTTP1.0中默认是每次请求/应答，客户端和服务器都会建立一次连接，请求完成后立即断开，这种是短连接。
当使用keep-alive后，客户端和服务端的连接持续有效，后续的请求就会避免重复建立连接，
减少服务器负担降低延迟，这种就是长连接。使用方式就是通过在HTTP请求头中添加Connection: keep-alive字段，
服务端会在响应头中添加Connection: keep-alive字段通知客户端长连接已经建立。
在HTTP1.1默认开启了长连接，除非在请求或响应头中明确关闭它。
在HTTP2中使用了多路复用，允许在同一个连接上处理多个请求和相应，取代了keep-alive机制。

<!-- HTTP 1.1 和 HTTP 2.0 的区别 -->
二进制协议：HTTP1.1的解析是基于文本，而HTTP2使用二进制，将请求和响应分割为更小的帧，从而实现多路复用。

多路复用：在一个连接里，客户端和服务器都可以同时发送多个请求或回应，而且不用按照顺序一一发送，
这样避免了HTTP队头阻塞，但是TCP的队头阻塞依旧存在。

HTTP队头阻塞
TCP队头阻塞

头部信息压缩：由于HTTP1.1每次请求都会带上所有信息，比如Cookie，这样会很浪费性能，
HTTP2引入头部压缩，一方面将头部信息使用gzip压缩后再发送，
另一方面客户端和服务器同时维护一张头部信息表，所有字段都会存入这张表，生成索引，只发送索引就可以。

服务器推送：HTTP2允许服务器向客户端主动发送资源，只限于静态资源如css，img等

<!-- HTTP队头阻塞 -->
在HTTP/1.1中，默认情况下，浏览器对同一域名下的并发连接数有限制（通常为6-8个），
这意味着浏览器同一时间最多只能与服务器建立6-8个连接。
同时，在同一连接中，请求和响应是按照顺序处理的，也就是说，一个请求需要等待前面的请求响应完成后才能开始处理。
如果前面的请求处理时间较长，后续请求就必须等待，从而导致队头阻塞。

总结：HTTP队头堵塞是指在同一域名下浏览器的连接数有限制，并且请求要在连接内按顺序处理，
这样就会导致某个请求的延迟或阻塞会影响后续请求的处理。

<!-- TCP队头阻塞 -->
在一个TCP连接中，如果某个数据包在传输过程中失误或者丢失，那么在这个数据包后发送的所有数据都需要等待，直到该数据被重新传输。
这种情况会导致接收方在TCP缓冲区中，后续的数据包被阻塞在错误数据包之后，无法继续处理，即被堵塞在队头

总结：TCP协议为了保证数据包的有序传输，如果一个数据包在丢失损坏后，
TCP接受端会要求重新发送该数据包，直到被正确接收为止。